//#ifndef __IAP_H
//#define __IAP_H


//#ifdef __cplusplus
//extern "C" {
//#endif 

//#include "gd32e10x.h"

////简单加密
//#define		key_xor			0x5A
//#define  MaxUpSizePerPack		990		//每包数据长度,建议800~950字节

////#define IapBufLenDef		2048			//定义缓存数据包大小


//typedef struct
//{
//	//uint8_t sta;

//	//uint8_t Ter_Type;//类型 0：终端 0xBD：OBD 其它
//	
////	//因为Flash不能每次写入一个Byte，
////	//所以保留上次写入不足部分，下次写入
////	uint8_t MF_LastBytesLen;
////	uint8_t MF_LastBytes[4];

//	//0：没有升级,1：升级成功；2：升级中；3存储成功，准备待机重启, 4升级失败,
//	//05 升级失败，擦除一遍所有存储区
//	uint8_t chk_flash_sta;	
//	uint8_t errStoreCnt;		//每次升级允许错误次数
//	uint8_t version[9];
//	uint32_t adr_last;			//固件的存储位置
//	
//	
//	
//	
//	uint32_t FileSize;	//总字节数
//	uint32_t FileSizeWr;	//已写入Flash总字节数
//	uint16_t AllPacCnt;	//总包数
//	uint16_t CurPacCnt;	//当前包号，从1开始
//	
//	
//	//升级数据缓存，等缓存到950节后再调用存储，
////	uint8_t IapBuf[IapBufLenDef];
////	uint32_t IapBufWrIdx;		//写入的地址下标
////	uint32_t IapBufRdIdx;		//读取的地址下标
//	
//	//计算校验相关
//	uint8_t calcCrcSta;
//	
//	uint16_t otaSecCounter;		//升级关闭CAN或调低CAN优先级计时
//	

//} Up_TypeDef;


///*
//初始化IAP变量
//*/
//void initIAP (void);

///*
//该函数需要一直被主循环调用，用于管理IAP
//*/
//void IAPProcess (void);
//	

////开机检查升级Flash区域是否为空, 擦除相关Flash
//void selfCheckUpAdr(void);
///*
//检查是否都是0xff，如果是则返回0
//不全是FF返回1
//*/
//uint8_t chk_all_ff(uint8_t * pda, uint32_t len);





////检查是否升级固件完整性并启动重启升级
//void checkIapValidAndReboot(void);
//	

//uint8_t crc32_chk(uint32_t * reLen);
//uint8_t get_pac_calc2(uint32_t adr, uint32_t * crc, uint8_t* pReData, uint16_t * pReLen);
//uint8_t find_pac_cur_adr(uint16_t pac_cur, uint32_t * adr);
//void reBootMe(void);
//uint32_t IapStoreData (uint16_t PacAll, uint16_t PacCur, uint8_t * pDa, uint32_t len);


//uint32_t sendUpFirmwareSuccess(uint8_t upType, u8 result);


//void 	ota_secCounter_clear(void);
//void ota_over_open_can_secDeal(void);
//void 	ota_fail_Counter_clear(void);



//#ifdef __cplusplus
//}
//#endif


//#endif



